不知不覺,我們的鐵人賽旅程已來到第 29 天。回首 Day 1,我們只有一個簡單的想法:「結合 Flutter 與 AI,打造一款能用的 App」。那時,我們的眼前還是一片空白的畫布。
如今,再次打開專案,一個功能完整、架構清晰、具備雲端儲存與 AI 智慧的應用程式——「省錢拍拍」已然成形。
今天,我們不寫新功能。讓我們先泡杯咖啡,放慢腳步,一同回顧這趟橫跨四週的開發之旅,盤點我們經歷的階段、掌握的技術,以及那些讓我們成長的挑戰。
我們的開發旅程:四大階段回顧
這是我們打下堅實基礎的一週。我們從最核心的概念出發,確保每一步都穩紮穩打。
Dart 語言基礎
、Stateless/StatefulWidget
、Column/Row/Container
佈局、ListView.builder
動態列表。ThemeData
和 google_fonts
為 App 打造了第一件客製化的外衣。這一階段,我們為 App 裝上了「大腦」和「記憶」,讓它從靜態的展示品,蛻變為可以互動的工具。
Form
表單處理、Navigator
頁面導航、setState
基礎狀態管理、Firebase Auth
使用者驗證、Firestore
資料庫設計 (子集合模型)、CRUD
(新增/讀取/更新/刪除) 操作。FirestoreService
,我們學習了分離 UI 與業務邏輯的重要架構原則,並透過滑動刪除 (Dismissible
) 讓 App 的互動體驗更上一層樓。這是整個系列最令人興奮的篇章。我們不再滿足於傳統的 App 功能,而是大膽地擁抱了生成式 AI。
image_picker
硬體互動、google_ml_kit
光學字元辨識 (OCR)、google_generative_ai
(Gemini API)、Prompt Engineering
提示工程、JSON
解析。在最後階段,我們從「開發者」切換到「產品發布者」的視角,專注於提升 App 的專業度與安全性。
Stream
即時數據聚合、UI/UX
細節優化 (如 DropdownButtonFormField
, GlobalKey
)、Firestore
安全規則、flutter_dotenv
環境變數、flutter_launcher_icons
與 flutter_native_splash
客製化。const
關鍵字的濫用或遺漏而修正程式碼。這讓我們深刻體會到它對 Flutter 性能優化和編譯時檢查的價值,也學會了判斷使用時機。gemini_service
的 Prompt 優化,到 firestore_service
的名稱衝突修正,我們不斷地在迭代中完善程式碼。這正是真實軟體開發的縮影——不斷試錯,不斷改進。從一個空白的資料夾,到一個功能齊全、AI 賦能的 App,這 29 天的旅程充滿了挑戰與收穫。我們不僅僅是堆砌了程式碼,更是完整地實踐了一場「產品思維」的旅程——從概念發想、技術選型、功能實現、架構重構,到最後的安全與發布準備。
感謝每一位跟隨至此的讀者。是你們的陪伴,讓這趟旅程更具意義。
明天,在我們鐵人賽的最終章,我將分享一些關於這個專案的最終感想,並暢想一下「省錢拍拍」還能有哪些更有趣的發展,為這次的系列畫下一個完美的句點。